package com.atguigu.gmall.cart.service;

import com.atguigu.gmall.cart.entity.CartItem;
import com.atguigu.gmall.cart.vo.AddCartSuccessVo;
import com.atguigu.gmall.user.vo.UserAuthInfoVo;

import java.util.List;

/**
 * @author:ahang
 * @create:2022-10-20 15:20
 * @Description:
 */
public interface CartBizService {
    /**
     * 添加购物车
     * @param skuId
     * @param skuNum
     * @return
     */
    AddCartSuccessVo addToCart(Long skuId, Integer skuNum);

    /**
     * 购物车保存的key
     * @return
     */
    String determinCartKey();

    /**
     * 查询购物车列表
     * @param cartKey
     * @return
     */
    List<CartItem> getCartItemList(String cartKey);

    /**
     * 修改购物车中的数量
     * @param skuId
     * @param num
     */
    void updateCartItemNum(Long skuId, Integer num);

    /**
     * 保存商品到指定的购物车
     * @param cartItem
     * @param cartKey
     */
    void saveCartItem(CartItem cartItem,String cartKey);

    /**
     * 修改选中状态
     * @param skuId
     * @param status
     */
    void updateCheckStatus(Long skuId, Integer status);

    /**
     * 删除购物车中的商品
     * @param skuId
     */
    void deleteCartItem(Long skuId);

    /**
     * 删除被选中的商品
     */
    void deleteChecked();

    /**
     * 获取所有选中的商品
     * @param cartKey
     * @return
     */
    List<CartItem> getCheckCartItem(String cartKey);

    /**
     * 合并购物车
     * @return
     */
    List<CartItem> mergeCart(UserAuthInfoVo userAuthInfo);

    /**
     * 清空购物车
     * @param cartKey
     */
    void clearCart(String cartKey);

    /**
     * 给一个过期时间
     * @param cartKey
     */
    void expireTempCart(String cartKey);
}
